'use strict';

// function create_counter(initial)
// {

//     var x = initial || 0;
//     // console.log(x);
//     return {
//         inc:function(){
//             x++;
//             console.log(x)
//             return x;
//         }
//     }
// }
// var create = create_counter();
// create_counter(5).inc();
// create_counter().inc(); 

/**
 * 页面输出：
 */

    document.write('页面输出语句：document.write('+ '我是页面输出语句' +')');
    
 /**
  * 控制台输出语句
  */

    // 最常用
    console.log("输出一条日志");
    
    // 这是一条普通的信息
    console.info("输出一条信息");

    // 输出警告语句：console.warn();
    console.warn("这是一条带有黄▲▲的 警告");

    //  输出一条错误信息
    console.error("这是一条带有红XX的 错误信息");

/**
 * 弹窗输出语句
 */

    alert("这是一条弹窗输出");
   
    /**
     *
     * 总结：JavaScript的输出语句有三种形式：
     *      
     * 1. 页面输出
     * 
     * 2. 控制台输出
     * 
     * 3. 弹窗输出
     * 
     */

/**
 * JavaScript的注释与Java一致
 * 1. 单行注释
 * --------------
 * // 注释内容
 * ----- e - n - d -----
 * 2.多行注释
 * ---------------------
 * * 注释内容 */

// -----------------------------------------------------

/*************************************************************
 * 字面量、变量和常亮
 */

 

 /**************************************************************
  *     JavaScript数据类型梳理
  *   可能包含了两种不同的数据类型的值： 基本数据类型 and 引用数据类型 
  * 数据类型决定了一个数据的特征，如：
  * 
  * 123 and '123'
  * 
  * 直观的看这两个数据都是 123， 实际上前者是一个数字，而后者是一个字符串
  * 对于不同的数据类型，在进行操作的时候会有很大的不同
  * 
  * JavaScript中一共有5中基本数据类型：
  * 
  *     +字符串型(String)
  * 
  *     + 数值型(Number)
  * 
  *     + 布尔型(Boolean)
  * 
  *     + undefined型(Undefined)
  * 
  *     + null型(Null)
  * 这5种类型之外的，都是Object，简单来看，JS中共有5种数据类型
  * /

  /**
   *      强制类型转换
   * 
   * 强制类型转换指将一个数据类型强制转换为其他的数据类型。
   * 一般是说，将其它的数据类型转换为 String、 Number、 拼串
   */


   /********************************* */

   /**
    * 栈 and 堆 梳理
    * 
    * JS 在运行时，数据是保存在 栈内存 和 堆内存中
    * 
    * 而在声明一个变量的时候，实际上就是在栈(内存)中创建一个空间用来保存变量。
    * 
    * 基础类型在栈内存中直接保存，
    * 引用类型在堆内存中保存
    * 变量中保存的实际上，对象在堆内存中保存
    * 
    */

    var a = 123;
    var b = treu;
    var c = 'hello';
    var d = {name:'林伟强', age: 21};

    /**  栈的特点： 先进后出     后进先出
     * 
     *      栈内存               堆内存
     * 
     *   d  =>  0x000       0x000 => name = '林伟强' , age = 21
     *   c  =>  hello   
     *   b  =>  true
     *   a  =>  123
     * 
     * 
     */